package com.icoopoo.modules.pagehelper.service.impl;

import java.util.List;

import org.apache.ibatis.session.RowBounds;
import org.apache.ibatis.session.SqlSessionFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import com.github.pagehelper.Page;
import com.github.pagehelper.PageHelper;
import com.github.pagehelper.PageInfo;
import com.icoopoo.ibase.base.BaseServiceImpl;
import com.icoopoo.modules.pagehelper.dao.PageHelperDao;
import com.icoopoo.modules.pagehelper.modules.PageHelperModel;
import com.icoopoo.modules.pagehelper.service.PageHelperService;

@Service
public class PageHelperServiceImpl extends BaseServiceImpl<PageHelperModel, PageHelperDao> implements PageHelperService{

	@Autowired
	private PageHelperDao pageHelperDao;
	
	@Autowired
	private SqlSessionFactory sqlSession;
	
	@Override
	public List<PageHelperModel> findPageHelperModels1() {
		//ibats 查询 调用的第一种方式 
		List<PageHelperModel> list = sqlSession.openSession().selectList("com.icoopoo.modules.pagehelper.dao.PageHelperDao.findPageHelperModels1", null, new RowBounds(0, 10));
		//List<PageHelperModel> list = pageHelperDao.findPageHelperModels1();
		return list;
	}

	@Override
	public List<PageHelperModel> findPageHelperModels2() {
		
		//第二种，Mapper接口方式的调用，推荐这种使用方式。
		PageHelper.startPage(1, 10);
		List<PageHelperModel> list = pageHelperDao.findPageHelperModels1();
		PageInfo<PageHelperModel> p = new PageInfo<PageHelperModel>(list);
		return list;
	}

	@Override
	public List<PageHelperModel> findPageHelperModels3() {
		//第三种，Mapper接口方式的调用，推荐这种使用方式。
		PageHelper.offsetPage(0, 10);
		List<PageHelperModel> list = pageHelperDao.findPageHelperModels1();
		return list;
	}

	@Override
	public List<PageHelperModel> findPageHelperModels4() {
		//第四种，参数方法调用
		//存在以下 Mapper 接口方法，你不需要在 xml 处理后两个参数
		//配置supportMethodsArguments=true
		//在代码中直接调用：
		List<PageHelperModel> list = pageHelperDao.findPageHelperModels4(1,10);
		return list;
	}

	@Override
	public List<PageHelperModel> findPageHelperModels5() {
		//jdk8 lambda用法
		Page<PageHelperModel> page = PageHelper.startPage(1, 10).doSelectPage(()-> pageHelperDao.findPageHelperModels1());

		List<PageHelperModel> list = page.getResult();
		System.out.println("total :" +page.getTotal());
		return list;
	}

}
